# 5.2 交通卡片控制小车

## 5.2.1 简介

交通卡片控制小车，卡片有前进，左转，右转，掉头，停止，AI视觉模块进行识别交通卡片，通过对应的卡片使小车进行相应的动作。

## 5.2.2 流程图

![b18](./media/b18png)



## 5.2.3 代码

```python
from machine import I2C, Pin, PWM
from Sengo1 import *
import time

# 等待 Sengo1 初始化（不可省略）
time.sleep(3)

# 通讯接口：I2C（可根据需要换为 UART，相关引脚请自行修改）
port = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)

sengo1 = Sengo1(0x60)
err = sengo1.begin(port)
print("sengo1.begin: 0x%x" % err)

# 开启卡片识别算法
err = sengo1.VisionBegin(sengo1_vision_e.kVisionCard)
print("sengo1.VisionBegin(sengo1_vision_e.kVisionCard):0x%x" % err)

# 电机驱动引脚定义（ESP32 任意输出引脚均可）
pin1 = Pin(32, Pin.OUT)     # 右轮方向
pin2 = PWM(Pin(25), freq=50)  # 右轮速度
pin3 = Pin(33, Pin.OUT)     # 左轮方向
pin4 = PWM(Pin(26), freq=50)  # 左轮速度

# 速度基准（占空比 0~65535）
right_speed = 30000
left_speed = 30000

def car_forward():
    pin1.value(0)
    pin2.duty_u16(right_speed)
    pin3.value(0)
    pin4.duty_u16(left_speed)

def car_back():
    pin1.value(1)
    pin2.duty_u16(50000 - right_speed)
    pin3.value(1)
    pin4.duty_u16(50000 - left_speed)

def car_left():
    pin1.value(0)
    pin2.duty_u16(25000)
    pin3.value(1)
    pin4.duty_u16(25000)

def car_right():
    pin1.value(1)
    pin2.duty_u16(25000)
    pin3.value(0)
    pin4.duty_u16(25000)

def car_stop():
    pin1.value(0)
    pin2.duty_u16(0)
    pin3.value(0)
    pin4.duty_u16(0)

while True:
    obj_num = sengo1.GetValue(sengo1_vision_e.kVisionCard, sentry_obj_info_e.kStatus)
    if obj_num == 1:
        for i in range(1, obj_num + 1):
            Tags = sengo1.GetValue(sengo1_vision_e.kVisionCard, sentry_obj_info_e.kLabel, i)
            if Tags == 1:
                car_forward()
            elif Tags == 2:
                car_left()
            elif Tags == 3:
                car_right()
            elif Tags == 4:
                car_back()
            elif Tags == 5:
                car_stop()
    else:
        car_stop()
    time.sleep(0.2)


```

## 5.2.4 代码结果

上传代码成功后，AI视觉模块会对拍到的画面进行识别，判断是否有交通卡片，如果有则想卡片的标签值赋值到变量Tags，通过对变量Tags的值进行判断，Tags = 1 小车前进，Tags = 2 小车左转 ，Tags = 3 小车右转 ，Tags = 4 小车后退 ，Tags = 5 小车停止 ,没有识别到卡片小车停止不动。

